`
https://leetcode.cn/problems/maximum-beauty-of-an-array-after-applying-operation/
`

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var maximumBeauty = function (nums, k) {
  // 对于每个数的可延伸范围 [nums[i] - k, nums[i] + k] 视为一个区间
  // 对 nums 排序后，挑选出来的区间就是连续的
  // 只需要考虑最左边的区间 [x - k, x + k] 和最右边的区间 [y - k, y + k] 的交集不为空，则中间选出的所有区间的交集也不为空
  // 也即要满足 x + k >= y - k ，即 y - x <= 2k
  // 于是原问题等价为找最长的连续子数组，其最大值减最小值 <= 2k
  // 数组排序后，就是 nums[right] - nums[left] <= 2k
  const n = nums.length
  nums.sort((a, b) => a - b)
  let res = 0
  let left = 0, right = 0

  while (right < n) {
    const n1 = nums[right++]

    while (n1 - nums[left] > 2 * k) {
      left++
    }

    res = Math.max(res, right - left)
  }

  return res
};